home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 1
/
Gekikoh Dennoh Club Vol. 1 (Japan).7z
/
Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin
/
kowin
/
archive
/
kob
/
kob001s.lzh
/
kob.has
< prev
next >
Wrap
Text File
|
1996-11-12
|
6KB
|
334 lines
*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
*
* kob.has …… こ-BASICのイベント処理
*
*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
.xref _kob_exec
.xref _kobas_exit
.xref graphic_move
.include kob.h
.include variable.h
.include doscall.mac
.include iocscall.mac
.include fefunc.h
.text
.even
.xdef _kob_flag
_kob_flag: .dc.w 0
_kob_event: .dc.w 0
.xdef _EventExec
_EventExec:
* KH ' 謎のイベント ',8(sp)
movem.l d3-d7/a3-a6,-(sp)
movea.l a6保存(pc),a6
movem.l 4+4*9(sp),d3/a3 * WID/info
move.l info_option(a3),d4 * option
move.l d3,_WinID
kob_event_start:
cmpi.w #15,d4 * interval event
bne 1f
move.l _ITIME(pc),d2
bmi event_def * interval event off
IOCS _ONTIME
move.l d0,d1
sub.l inter_time(pc),d0
cmp.l d2,d0
bcs event_def * 時間来てない
move.l d1,inter_time
bra @f
1:
cmpi.w #1,d4 * redraw event
bne @f
bsr graphic_repalet
@@:
move.w d4,d0 * option(イベント番号)
lsl.w #2,d0
lea.l system関数登録,a0
move.l (a0,d0.w),d5 * プログラム開始アドレス (or NULL)
beq event_def * イベント未登録
* bsr global_info_copy * info を global変数参照領域にコピー
* lea.l _kob_flag(pc),a0
* move.w #1,(a0)+ * 動作中
* move.w #15,(a0)+ * interval event で継続実行
* KOP 'kob_flag を 1 に!'
move.l xbFLAG,d7
bset #7,d7 * auto
move.l d7,xbFLAG
* moveq.l #TRUE,d0
* move.l d0,returnNUM
clr.l returnNUM
move.l 変数area,-(sp)
movem.l d3/d4,-(sp)
move.l d3,-(sp) * ウィンドウポインタ
bsr _WindowGetClientData
move.l d0,(sp) * ウィンドウ番号
subq.l #4,sp
move.w #$0001,-(sp) * int (関係ないけど一応)
move.w #1,-(sp) * 引き数 1個
move.l d5,-(sp) * プログラム開始アドレス
move.l a3,-(sp) * auto システム変数
* KH 'プログラム開始アドレス',d5
bsr _kob_exec * イベント関数実行
movea.l (sp)+,a3
lea.l 4+2+10(sp),sp
movem.l (sp)+,d3/d4
move.l (sp)+,変数area
move.l returnNUM,d0
bne event_end * return(0) で、こBのイベントデフォルト処理行う
event_def: * デフォルトのイベント処理
move.l #FALSE,d0
bsr _event_default * default処理
event_end:
movem.l (sp)+,d3-d7/a3-a6
rts
inter_time:
.dc.l 0
** ** ** ** ** ** ** ** ** **
_event_default:
move.w d4,d1 * option
add.w d1,d1
move.w table(pc,d1.w),d1
jmp table(pc,d1.w)
table:
.dc.w EventOpen-table * 初期化 0
.dc.w EventRedraw-table * 描き直し
.dc.w EventClose-table * クローズ
.dc.w EventPop-table * ポップ
.dc.w EventPush-table * プッシュ
.dc.w EventMove-table * 移動
.dc.w EventResize-table * 変形
.dc.w EventIconify-table * アイコン化
.dc.w EventZoom-table * 拡大 8
.dc.w EventScroll-table * スクロール
.dc.w EventMouseSwitch-table * マウスのスイッチ
.dc.w EventMouseMove-table * マウスの移動
.dc.w EventMouseEnter-table * マウスの移動
.dc.w EventMouseOut-table * マウスの移動
.dc.w EventKey-table * キー入力
.dc.w EventInterval-table * タイマイベント
.dc.w EventNon-table * イベントなし 16
.dc.w EventUser-table * ユーザイベント
.dc.w EventGraphic-table * グラフィックモード
EventOpen:
lea.l _bwp,a0
move.l _WinNumber,d0
* KH 'Event Open Number = ',d0
lsl.w #2,d0
move.l d3,(a0,d0.w) * WindowID 保存
clr.l -(sp) * NULL
move.l _WinNumber,-(sp)
move.l d3,-(sp)
bsr _WindowSetClientData
bsr _WindowRedraw
lea.l 12(sp),sp
move.l #TRUE,d0
rts
EventClose:
bsr _kobas_exit
move.l #TRUE,d0
rts
EventMove:
movem.l d3/a3,-(sp)
bsr graphic_move
addq.l #8,sp
move.l info_y(a3),-(sp)
move.l info_x(a3),-(sp)
move.l d3,-(sp)
bsr _WindowMove
lea.l 12(sp),sp
* move.l #FALSE,d0
rts
EventResize:
movem.l info_x(a3),d0/d1/a0/a1
movem.l d0/d1/a0/a1,-(sp)
move.l d3,-(sp)
bsr _WindowResize
lea.l 20(sp),sp
* move.l #FALSE,d0
rts
EventIconify:
pea.l 16.w
pea.l 9.w
pea.l icon_title(pc)
move.l d3,-(sp)
bsr _IconEnt
lea.l 16(sp),sp
* move.l #FALSE,d0
rts
icon_title:
.dc.b 'icon',0
.even
EventRedraw:
EventMouseSwitch:
EventPop:
EventPush:
EventZoom:
EventScroll:
EventMouseMove:
EventMouseEnter:
EventMouseOut:
EventKey:
EventNon:
EventUser:
EventGraphic:
EventInterval:
rts
** ** ** ** ** ** ** ** ** **
.if 0
global_info_copy:
lea.l global_info(pc),a0
movea.l a3,a1
moveq #info_size/4-1,d0
@@:
move.l (a1)+,(a0)+
dbra d0,@b
rts
.xdef global_info
global_info:
.ds.b info_size
.endif
** ** ** ** ** ** ** ** ** **
.xdef ko_debug
ko_debug:
movem.l d0-d2/a0-a2,-(sp)
move.l 4+4*6(sp),-(sp)
bra 1f
.xdef ko_hex_print
ko_hex_print:
movem.l d0-d2/a0-a2,-(sp)
move.l 4+4*6(sp),d0
lea.l dbuf(pc),a0
move.l a0,-(sp)
move.b #'$',(a0)+
FPACK __HTOS
bra @f
.xdef ko_dec_print
ko_dec_print:
movem.l d0-d2/a0-a2,-(sp)
move.l 4+4*6(sp),d0
lea.l dbuf(pc),a0
move.l a0,-(sp)
FPACK __LTOS
@@:
move.b #13,(a0)+
move.b #10,(a0)+
clr.b (a0)
1:
bsr _ConsoleOpen
bsr _ConsolePrint
addq.l #4,sp
movem.l (sp)+,d0-d2/a0-a2
rts
dbuf:
.ds.b 16
** ** ** ** ** ** ** ** ** **
.text
.even
_WindowHeapSize::
* .dc.l 1930
.dc.l 2048
_WINX:: .dc.l 10
_WINY:: .dc.l 10
_WINH:: .dc.l 0
_WINV:: .dc.l 0
_ITIME:: .dc.l 100
_bwp:: .ds.l WINMAX
_WinNumber:: .dc.l 0
_WinID:: .dc.l 0
.xdef _WindowMain
_WindowMain:
movem.l 4(sp),d0/d1
pea.l _WINV(pc)
pea.l _WINH(pc)
pea.l _WINY(pc)
pea.l _WINX(pc)
movem.l d0/d1,-(sp)
bsr _AnalyzeArgs
move.l d0,(sp)
bsr _kobas_init
lea 4*6(sp),sp
tst.l d0
beq 2f
bsr _kobas_exit
bra 1f
2:
bsr _kobas_init_exec
1:
clr.w xb動作mode * H8/4/20 夜中(エラーが出たらハング!)
rts
.end